共计 2871 个字符,预计需要花费 8 分钟才能阅读完成。
Windows 环境
Docker Desktop for Windows:https://docs.docker.com/desktop/setup/install/windows-install/
设置镜像源:Settings → Docker Engine:
"registry-mirrors": [
"https://mirrors.ustc.edu.cn",
"https://docker.unsee.tech",
"https://docker.1panel.live",
"https://mirror.azure.cn",
"https://dockerpull.org"
],
环境初始化 (CentOS)
# 安装 wget,参数 - y 会自动选择 y,全自动
yum -y install wget
# 下载阿里云源,- O 选项以其他名称保存下载的文件
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 基础仓库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # 额外仓库
# 清空本地缓存
yum clean all
# 生成新的缓存
yum makecache
# 清空现有规则来暂时停止防火墙 (警告:这只适合在没有配置防火墙的环境中,如果已经配置过默认规则为 deny 的环境,此步骤将使系统的所有网络访问中断)
iptables -F
# 查看是否开启了 SELinux,确保是 disabled 的状态
getenforce
# 临时关闭 SELinux
setenforce 0
# 永久关闭 SELinux,SELINUX=enforcing 改为 SELINUX=disabled 即可
vi /etc/selinux/config
# reboot 使配置生效
reboot
# 关闭防火墙,开机自动关闭
systemctl disable firewalld
# 关闭防火墙
systemctl stop firewalld
安装 Docker
开启 Linux 内核的流量转发
# 内核版本不能低于 3.10
uname -r
# 查看发行版本
cat /etc/redhat-release
# 开启 Linux 内核的流量转发
cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward = 1
EOF
# 加载修改内核的参数,配置文件
modprobe br_netfilter # 加载 br_netfilter 模块
sysctl -p /etc/sysctl.d/docker.conf # 重新加载内核
利用 yum 快速安装 docker
# 下载阿里源 repo 文件
wget -O /etc/yum.repos.d/docker.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新 yum 缓存
yum clean all && yum makecache
# 查看源中可用版本
yum list docker-ce --showduplicates | sort -r
# yum 安装 docker
yum install docker-ce-20.10.9 -y
# 卸载
yum remove docker-ce-20.10.9 -y
配置 Docker 加速器
mkdir -p /etc/docker
vi /etc/docker/daemon.json
写入如下内容:
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn/"]}
systemctl daemon-reload
# 开机启动 docker
systemctl enable docker
# 重新启动 docker
systemctl restart docker
# 查看版本,验证 docker 是否正确启动
docker version
# 查看 docker 信息
docker info
# docker 数据存放路径
docker info | grep Root
用 Docker 使用各种操作系统
使用 docker 来切换不同的发行版,内核使用的都是宿主机的内核。
# 获取 ubuntu 镜像
docker pull ubuntu
# 运行容器且进入容器内,- i 交互式命令操作,- t 开启一个终端
# bash 进入容器后,执行的命令
docker run -it ubuntu bash
# --rm 容器退出时删除该容器
docker run -it --rm ubuntu bash
# 查看容器内的发行版本
cat /etc/lsb-release
# 退出容器
exit
# 进入到正在运行的容器内
docker exec -it 容器 id bash
镜像操作
拉取镜像
docker pull busybox
busybox 是一个集成了数百个 Linux 命令的精简工具箱,只有几兆大小,被誉为 Linux 系统的瑞击军刀。
搜索镜像:docker search nginx
查看镜像
# 查看本地所有镜像
docker images
# 查看具体镜像
docker images nginx
# 可以指定具体 tag
docker images nginx:latest
# 只列出镜像 id,--quiet
docker images -q
# 格式化显示镜像
docker images --format "{{.ID}} -- {{.Repository}}"
# 以表格形式显示
docker images --format "table {{.ID}} t {{.Repository}}"
删除镜像
docker rmi busybox
容器操作
创建并启动容器
# 创建容器
docker create -it --name=busybox busybox
# 启动容器
docker start busybox
# 查看容器是否在运行
docker ps
# 查看停止状态的容器
docker ps -a
# 停止容器
docker stop busybox
# 创建并启动容器
docker run -it --name=busybox2 busybox
# - d 后台运行容器,-p 80:80 端口映射 (宿主机端口: 容器内端口)
docker run -d -p 80:80 nginx
上述命令中,- t 参数是分配一个伪终端,- i 参数从终端 STDIN 打开,同时使用 -it 参数可以进入交互模式。
在交互模式下,可以通过所创建的终端来输入命令,例如:ps aux
,容器 1 号进程为 sh 命令,在容器内部并不能看到主机上的进程信息,因为容器内部和主机是完全隔离的。同时由于 sh 是 1 号进程,意味着如果通过 exit 退出 sh,那么容器也会退出。
删除容器
docker rm busybox2
# 要删除正在运行的容器,须加 -f(--force)参数
docker rm -f busybox
正文完